package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ICompanySaleRebatesRulesDAO;
import org.jsola.hr.dto.CompanySaleRebatesRulesAddDTO;
import org.jsola.hr.dto.CompanySaleRebatesRulesUpdateDTO;
import org.jsola.hr.entity.CompanySaleRebatesRulesDO;
import org.jsola.hr.query.CompanySaleRebatesRulesQuery;
import org.jsola.hr.vo.CompanySaleRebatesRulesListVO;
import org.jsola.hr.vo.CompanySaleRebatesRulesVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 用工单位返费关联表
 *
 * @author zhr
 */
public interface ICompanySaleRebatesRulesService extends IService<ICompanySaleRebatesRulesDAO, CompanySaleRebatesRulesDO> {

    /**
     * 新增用工单位返费关联表
     *
     * @param companySaleRebatesRulesAddDTO 新增用工单位返费关联表DTO
     * @param tokenUser                     当前用户
     * @return 用工单位返费关联表详情信息
     */
    CompanySaleRebatesRulesVO save(CompanySaleRebatesRulesAddDTO companySaleRebatesRulesAddDTO, TokenUser tokenUser);

    /**
     * 修改用工单位返费关联表
     *
     * @param companySaleRebatesRulesUpdateDTO 修改用工单位返费关联表DTO
     * @param tokenUser                        当前用户
     * @return 更新数量
     */
    int update(CompanySaleRebatesRulesUpdateDTO companySaleRebatesRulesUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除用工单位返费关联表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser                  当前用户
     * @param companySaleRebatesRulesIds 用工单位返费关联表id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... companySaleRebatesRulesIds);

    /**
     * 根据用工单位返费关联表id查找
     *
     * @param companySaleRebatesRulesId 用工单位返费关联表id
     * @param siteId                    所属站点id
     * @return 用工单位返费关联表详情信息
     */
    CompanySaleRebatesRulesVO selectById(String companySaleRebatesRulesId, String siteId);

    /**
     * 查询用工单位返费关联表
     *
     * @param companySaleRebatesRulesQuery 查询条件
     * @param siteId                       所属站点id
     * @return 用工单位返费关联表列表信息
     */
    List<CompanySaleRebatesRulesListVO> select(CompanySaleRebatesRulesQuery companySaleRebatesRulesQuery, String siteId);

    /**
     * 查询用工单位返费关联表记录数
     *
     * @param companySaleRebatesRulesQuery 查询条件
     * @param siteId                       所属站点id
     * @return 用工单位返费关联表记录数
     */
    int selectCount(CompanySaleRebatesRulesQuery companySaleRebatesRulesQuery, String siteId);

    /**
     * 分页查询用工单位返费关联表
     *
     * @param companySaleRebatesRulesQuery 查询条件
     * @param siteId                       所属站点id
     * @return 用工单位返费关联表列表信息
     */
    Page<CompanySaleRebatesRulesListVO> selectPage(CompanySaleRebatesRulesQuery companySaleRebatesRulesQuery, String siteId);


    /**
     * 根据用工单位返费关联表id查找
     *
     * @param companySaleRebatesRulesId 用工单位返费关联表id
     * @param siteId                    所属站点id
     * @return 用工单位返费关联表
     */
    CompanySaleRebatesRulesDO selectDOById(String companySaleRebatesRulesId, String siteId);

    /**
     * 查询用工单位返费关联表
     *
     * @param companySaleRebatesRulesQuery 查询条件
     * @param siteId                       所属站点id
     * @return 用工单位返费关联表列表
     */
    List<CompanySaleRebatesRulesDO> selectDO(CompanySaleRebatesRulesQuery companySaleRebatesRulesQuery, String siteId);

    /**
     * 查询对应用工单位绑定的返费规则关联关系
     *
     * @param companyId 用工单位Id
     * @param siteId    站点
     * @return 绑定的返费规则关联关系
     */
    CompanySaleRebatesRulesDO selectRulesByCompanyId(String companyId, String siteId);

    /**
     * 根据规则Id删除关联关系
     *
     * @param rulesIdList 规则Id
     */
    void deleteByRulesIdList(List<String> rulesIdList);

    /**
     * 查询返费规则绑定的用工单位的关联关系
     *
     * @param rulesId   返费规则Id
     * @param tokenUser 当前用户
     * @return 管变脸关系
     */
    List<CompanySaleRebatesRulesDO> selectByRulesId(String rulesId, TokenUser tokenUser);
}


